function fetchStudents(page) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (Math.random() < 0.2) {
        reject(new Error(`网络错误！获取数据${page}页数失败!`));
        return;
      }

      const stus = new Array(10).fill(null).map((d, i) => ({
        id: `NO.${(page - 1) * 10 + i + 1}`,
        name: `姓名${(page - 1) * 10 + i + 1}`,
      }));
      resolve(stus);
    }, Math.floor(Math.random() * 5000));
  });
}

// 同时获取10页数据，中途有错误直接中断
/* Promise.all(new Array(10).fill(null).map((o, i) => fetchStudents(i + 1)))
  .then((res) => console.log(res.flat()))
  .catch((err) => console.log(err)); */

// 同时获取10页数据，错误加入数组
/* Promise.allSettled(
  new Array(10).fill(null).map((o, i) => fetchStudents(i + 1))
).then((res) => {
  console.log(
    res
      .filter((o) => o.status === "fulfilled")
      .map((o) => o.value)
      .flat()
  );
}); */

// 获取任意成功的数据，如果全部失败，则打印全部失败的原因
/* Promise.any(new Array(10).fill(null).map((o, i) => fetchStudents(i + 1)))
  .then((res) => console.log(res))
  .catch((err) => console.log(err)); */

Promise.race(new Array(10).fill(null).map((o, i) => fetchStudents(i + 1)))
  .then((res) => console.log(res))
  .catch((err) => console.log(err));
